## 1. Подбрасывание монеты

Задание:
```
1. Создайте список из n-монеток, n - вводится с клавиатуры
2. Подбросьте(flip) все монетки. У каждой монетки в списке вызовите метод .flip()
3. Выведите соотношение выпавших орлов и решек в процентах

# Пояснение: когда вы создаете монетку, то она находится в неопределенном состоянии self.side = None, т.е.
# она находится у вас в руке и не выпала ни орлом ни решкой. Монетка "определеяется" со стороной(орел/решка),
```

```python
import random



class Coin:
    def __init__(self):
        self.side = None

    def flip(self) -> None:
        """
        Подбрасывание монетки. # heads-орел/tails-решка
        """
        self.side = ...  # random: heads/tails

```


## 2. Автомобиль

Описать класс Car
``` python
class Car:
  ...
  
car1 = Car()
```

а) У машины должны быть атрибуты
* "сколько бензина в баке" (gas)
* "вместимость бака" - сколько максимум вмещается бензина (capacity)
* "расход топлива на км" (gas_per_km)

б) метод "залить столько-то литров в бак"

``` python
car1.fill(5)  # залили 5 литров
```

должна учитываться вместительность бака
если пытаемся залить больше, чем вмещается, то заполняется полностью + print'ом выводится сообщение о лишних литрах

в) метод "проехать сколько-то км"

``` python
car1.ride(50)  # едем 50 км (если хватит топлива) 
```
выведите сообщение: "проехали ... километров"
в результате поездки тратится бензин
Машина едет пока хватает бензина

г) добавить атрибут с пробегом, который увеличивается в результате ride


### Дополнительно

## вы разрабатываете программу для интернет-магазина. 

В этом магазине могут быть как реальные (физические) товары, так и электронные. 

Для этих двух групп, очевидно, нужен разный набор атрибутов:

> для реальных физических товаров: id, name, price, weight, dims

где 
`id` - идентификатор товара (целое число);
`name` - наименование товара (строка);
`price` - цена товара (вещественное число); 
`weight` - вес товара (вещественное число);
`dims = (lenght, width, depth)` - длина, ширина, глубина - габариты товара (вещественные числа);

> для электронных товаров: `id, name, price, memory, frm`

где 
`id` - идентификатор товара (целое число);
`name` - наименование товара (строка); 
`price` - цена товара (вещественное число); 
`memory` - занимаемый размер (в байтах - целое число);
`frm` - формат данных (строка: pdf, docx и т.п.)

Так как все товары могут идти вперемешку, то мы хотим, чтобы в каждом объекте (для товара) присутствовали все атрибуты:

`id, name, price, weight, dims, memory, frm`

с начальными значениями `None`. 

А уже, затем, нужным из них будут присвоены конкретные данные.

Для реализации этой логики объявите в программе базовый класс с именем `Thing` (вещь, предмет), объекты которого могут создаваться командой:

```python
th = Thing(name, price)
```
А атрибут `id` должен формироваться автоматически и быть уникальным для каждого товара (например, можно для каждого нового объекта увеличивать на единицу).

В объектах класса `Thing` должен формироваться полный набор локальных атрибутов (`id, name, price, weight, dims, memory, frm`) со значением `None`, кроме атрибутов: `id, name, price`.

Далее, нужно объявить два дочерних класса:

```
Table - для столов;
ElBook - для электронных книг.
```
Объекты этих классов должны создаваться командами:

```python
table = Table(name, price, weight, dims)
book = ElBook(name, price, memory, frm)
```

Причем, атрибуты `name, price` (а также `id`) следует инициализировать в базовом классе, т.к. они общие для всех товаров. 

Остальные атрибуты должны либо принимать значение `None`, если не используются, либо инициализироваться конкретными значениями уже в дочерних классах.

Наконец, в базовом классе `Thing` объявите метод:

`get_data()` - для получения кортежа в формате (`id, name, price, weight, dims, memory, frm`)

Пример использования классов :

```python
table = Table("Круглый", 1024, 812.55, (700, 750, 700))
book = ElBook("Python ООП", 2000, 2048, 'pdf')
print(*table.get_data())
print(*book.get_data())
```

